package com.chen.aop;

import lombok.extern.slf4j.Slf4j;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

@Slf4j
@Component
@Order(1)
//@Aspect
public class MyAspect5 {
    //前置通知
    //@Before("execution(public void com.chen.service.Impl.DeptServiceImpl.deleteById(java.lang.Integer))")
    //完成的切入点表达式，没有使用任何通配符
    //@Before("execution(void com.chen.service.Impl.DeptServiceImpl.deleteById(java.lang.Integer))")
    //访问权限符可以省略
//    @Before("execution(* deleteById(..))")//包名和类名也可以省略，但是不推荐
//    @Before("execution(* com.chen.service.Impl.*.*(..))")
    //*单个字符表示任意参数，..表示任意多个参数
//    @Before("execution(* com.chen.service.Impl.*.del*(..))")

    //匹配list和deleteById方法
//    @Before("execution(* com.chen.service.Impl.*.del*(..)) ||"+
//            "execution(* com.chen.service.Impl.*.list(..)")

    //使用@annotation(注解类型)切入点表达式匹配注解
    @Before("@annotation(com.chen.anno.LogOperation)")
    public void before(){
        log.info("MyAspect4 -> before ...");
    }

}